<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
App::uses('TiposPermissoesFTC', 'Business');
//App::import('FtcPermissaosController', 'Controller');
App::uses('PermissaoFT', 'Business');

App::uses('FtcPermissaosController', 'Controller');

/**
 * Description of FtcGerenciadorPermissoes
 *
 * @author DTI
 */
class FtcGerenciadorPermissoes {

    private $permissoes = array();
    private $userId;
    private $inicializado = false;

    function __construct($userId = null) {
        $this->userId = $userId;
        //   $this->inicializa();
    }

    private function inicializa() {
        $permissaoController = new FtcPermissaosController();
        $listPermissoes = $permissaoController->getPermissaoByUser($this->userId);
        foreach ($listPermissoes as $permissao) {
            $p = new PermissaoFT();
            $idTipoPermissao = $permissao['FtcPermissao']['ftc_permissao_tipos_id'];
            switch ($idTipoPermissao) {
                case '1':
                    $p->setTiposPermissoesFTC(TiposPermissoesFTC::ADMIN);
                    break;
                case '2':
                    $p->setTiposPermissoesFTC(TiposPermissoesFTC::OM);
                    $p->setIdOm($permissao['FtcPermissao']['geral_organizacao_militars_id']);
                    break;
                case '3':
                    $p->setTiposPermissoesFTC(TiposPermissoesFTC::FT);
                    $p->setIdFt($permissao['FtcPermissao']['ftc_forcas_tarefas_id']);
                    break;
                case '4':
                    $p->setTiposPermissoesFTC(TiposPermissoesFTC::RELATORIO);
                    break;
            }
            array_push($this->permissoes, $p);
        }

        //   var_dump($this->permissoes);
    }

    //Retorna true se ele for administrador do sistema e false se não
    public function temPermissaoAdministrador() {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == TiposPermissoesFTC::ADMIN) {
                return true;
            }
        }
        return false;
    }

    //Retorna uma lista com as permissões de OM que ele possui
    //Caso não tena nehum, retorna uma lista vazia
    public function getPermissoesOm() {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        $idOms = array();
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == TiposPermissoesFTC::OM) {
                array_push($idOms, $permissao->getIdOm());
            }
        }
        return $idOms;
    }

    //Retorna uma lista com as permissões de FT que ele possui
    //Caso não tena nehum, retorna uma lista vazia
    public function getPermissoesFt() {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        $idFts = array();
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == TiposPermissoesFTC::FT) {
                array_push($idFts, $permissao->getIdFt());
            }
        }
        return $idFts;
    }

    public function temPermissaoOm($om) {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == TiposPermissoesFTC::OM) {
                if ((int) $permissao->getIdOm() == (int) $om) {
                    return true;
                }
            }
        }
        return false;
    }

    public function temPermissaoFt($ft) {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == TiposPermissoesFTC::OM) {
                if ((int) $permissao->getIdOm() == (int) $ft) {
                    return true;
                }
            }
        }
        return false;
    }

    //retorna true se ele tem esse tipo de permissão e false se não tiver
    public function temEsseTipoPermissao($idTipo) {
        if (!$this->inicializado) {
            $this->inicializa();
            $this->inicializado = true;
        }
        foreach ($this->permissoes as $permissao) {
            if ($permissao->getTiposPermissoesFTC() == (int) $idTipo) {
                return true;
            }
        }
        return false;
    }

}

?>
